/**
 *	HTTP封装，基于axios
 *	注意：config作为配置入参数，决定对于返回码是否需要深层次封装，如果未定义默认封装
 */

 import axios from 'axios'
 import {DanluJsBridge} from 'common/index'
 const getNetError = function(status){
 	var message = ""
 	switch(status){
 		case 400: message = '请求错误'  ;break
 		case 401: message = '未授权，请登录'  ;break
 		case 403: message = '拒绝访问'  ;break
 		case 404: message = '请求地址出错'  ;break
 		case 408: message = '请求超时'  ;break
 		case 500: message = '服务器内部错误'  ;break
 		case 501: message = '服务未实现'  ;break
 		case 502: message = '网关错误'  ;break
 		case 503: message = '服务不可用'  ;break
 		case 504: message = '网关超时'  ;break
 		case 505: message = 'HTTP版本不受支持'  ;break
 		default:  message = '网络错误'
 	}
 	return message
 }
 const http = {
 	showLoading : function(config){
 		DanluJsBridge.callHandler('showLoading', {
 			text: '加载中',
 			timeout:10000
 		});	
 		
 		
 	},
 	hideLoading : function(){
 		DanluJsBridge.callHandler('hideLoading');
 	},
	/**
	 * [requestGet 封装get请求]
	 * @param {[string]} url [请求地址]
	 * @return {[object]}    [promise]
	 */
	 get : function(url,data,config) {
	 	this.showLoading(config)
	 	return axios.get(url,{params: data})
	 	.then((res) => {
	 		this.hideLoading();
	 		if (res.status == 200) {
	 			if (config && config.custom) {
	 				return Promise.resolve(res.data)
	 			}else{
		 			if (!res.data.status) {
		 				return Promise.resolve(res.data.data)
		 			}else{
		 				DanluJsBridge.callHandler('alert', {
		 					title: '提示',
		 					message: res.data.msg,
		 					button: '我知道了'
		 				})
		 				return Promise.reject(res.data)
		 			}	
	 			}
	 		}else{
	 			DanluJsBridge.callHandler('alert', {
	 				title: '提示',
	 				message: this.getNetError(res.status),
	 				button: '我知道了'
	 			})
	 			return Promise.reject()
	 		}
	 	})
	 },

	/**
	 * [requestPost 封装post请求]
	 * @param {[string]} url [请求地址]
	 * @param {[object]} data [数据]
	 * @return {[object]}    [promise]
	 */
	 post : function(url, data,config) {
	 	var showLoading = true
 		setTimeout(function(){
 			if (showLoading) {
	 			DanluJsBridge.callHandler('showLoading', {
		 			text: '加载中',
		 			timeout:1000
		 		});	
 			}
 		},1000)


	 	return axios.post(url, data)
	 	.then((res) => {
	 		showLoading = false
	 		this.hideLoading();
	 		if (res.status == 200) {
	 			if (config && config.custom) {
	 				return Promise.resolve(res.data)
	 			}else{
		 			if (!res.data.status) {
		 				return Promise.resolve(res.data.data)
		 			}else{
		 				DanluJsBridge.callHandler('alert', {
		 					title: '提示',
		 					message: res.data.msg,
		 					button: '我知道了'
		 				})
		 				return Promise.reject(res.data)
		 			}	
	 			}
	 			
	 		}else{
	 			DanluJsBridge.callHandler('alert', {
	 				title: '提示',
	 				message: this.getNetError(res.status),
	 				button: '我知道了'
	 			})
	 			return Promise.reject()
	 		}
	 	})
	 },

	/**
	 * [request_put 封装put请求]
	 * @param  {[string]} url  [请求地址]
	 * @param {[object]} data [数据]
	 * @return {[object]}      [promise]
	 */
	 put : function(url, data,config) {
	 	this.showLoading(config)
	 	return axios.put(url, data)
	 	.then((res) => {
	 		this.hideLoading();
	 		if (res.status == 200) {
	 			if (config && config.custom) {
	 				return Promise.resolve(res.data)
	 			}else{
		 			if (!res.data.status) {
		 				return Promise.resolve(res.data.data)
		 			}else{
		 				DanluJsBridge.callHandler('alert', {
		 					title: '提示',
		 					message: res.data.msg,
		 					button: '我知道了'
		 				})
		 				return Promise.reject(res.data)
		 			}	
	 			}
	 		}else{
	 			DanluJsBridge.callHandler('alert', {
	 				title: '提示',
	 				message: this.getNetError(res.status),
	 				button: '我知道了'
	 			})
	 			return Promise.reject()
	 		}
	 	})
	 },

	/**
	 * [request_delete 封装delete请求]
	 * @param  {[string]} url  [请求地址]
	 * @return {[object]}      [promise]
	 */
	 delete : function(url,config) {
	 	this.showLoading(config)
	 	return axios.delete(url)
	 	.then((res) => {
	 		this.hideLoading();
	 		if (res.status == 200) {
	 			if (config && config.custom) {
	 				return Promise.resolve(res.data)
	 			}else{
		 			if (!res.data.status) {
		 				return Promise.resolve(res.data.data)
		 			}else{
		 				DanluJsBridge.callHandler('alert', {
		 					title: '提示',
		 					message: res.data.msg,
		 					button: '我知道了'
		 				})
		 				return Promise.reject(res.data)
		 			}	
	 			}
	 		}else{
	 			DanluJsBridge.callHandler('alert', {
	 				title: '提示',
	 				message: this.getNetError(res.status),
	 				button: '我知道了'
	 			})
	 			return Promise.reject()
	 		}
	 	})
	 }	
	}

	export default http

